//
// Created by XML on 2023/9/18.
//

#include "stdio.h"

/**
 * 类型类型：
 * 1、自动变量auto 默认
 * 2、静态变量static
 * 3、寄存器变量 register
 *
 * 作用域：
 * 1、函数原型作用域
 * 2、函数作用域
 * 3、文件作用域
 * 4、块作用域
 *
 * @return
 */

// 文件作用域
int global_var = 1;


void LocalStaticVar(void) {
    // 静态变量
    // 1. 作用域全局，内存不会因函数退出而销毁
    // 2. int 初值默认为 0
    static int static_var;

    // 自动变量 auto关键字可以省略
    // 1. 函数、块作用域，随着函数和块退出而销毁
    // 2. 没有默认初值
    int non_static_var;

    printf("static var: %d\n", static_var++);
    printf("non static var: %d\n", non_static_var++);
}

// 函数原型作用域
double Add(double a, double b);

// 函数作用域
void CleanMemory() {
    int eraser = -1;
}

void PassByMemory(int  parameter){
    printf("parameter: %d\n",parameter);
}

// 寄存器变量 register
void PassByRegister(register int  parameter){
    printf("parameter: %d\n",parameter);
}

int main() {
    printf("global_var: %d\n",global_var);

    // 自动变量
    auto int value = 0;

    {
        // 块作用域，外部无法访问
        auto int a = 0;
        printf("%d\n",a);
    }
//    printf("%d\n",a);// 无法访问块作用域的数据

    LocalStaticVar();
    CleanMemory();
    LocalStaticVar();
    CleanMemory();
    LocalStaticVar();

    return 0;
}